class Solution:
def canPartition(self, nums: List[int]) -> bool:
dp = [-1] * (len(nums)+ 1)
avg = sum(nums) // 2
@cache
def trav(sum1, sum2, ptr):
if ptr == len(nums):
return sum1 == sum2
if sum1> avg:
return False
if sum2 > avg:
return False
return trav(sum1+nums[ptr], sum2, ptr+1) or trav(sum1, sum2+nums[ptr], ptr+1)
return dp[ptr]
return trav(0, 0 , 0)
1277A - Happy Birthday Polycarp | 577A - Multiplication Table |
817C - Really Big Numbers | 1355A - Sequence with Digits |
977B - Two-gram | 993A - Two Squares |
1659D - Reverse Sort Sum | 1659A - Red Versus Blue |
1659B - Bit Flipping | 1480B - The Great Hero |
1519B - The Cake Is a Lie | 1659C - Line Empire |
515A - Drazil and Date | 1084B - Kvass and the Fair Nut |
1101A - Minimum Integer | 985D - Sand Fortress |
1279A - New Year Garland | 1279B - Verse For Santa |
202A - LLPS | 978A - Remove Duplicates |
1304A - Two Rabbits | 225A - Dice Tower |
1660D - Maximum Product Strikes Back | 1513A - Array and Peaks |
1251B - Binary Palindromes | 768B - Code For 1 |
363B - Fence | 991B - Getting an A |
246A - Buggy Sorting | 884A - Book Reading |